#ifndef _GAME_STATE_H
#define _GAME_STATE_H

#include "State.h"
#include "Skydome.h"
#include "Heightmap.h"
#include "GraphicalUserInterface.h"
#include "Entity.h"
#include "ParticleEmitter.h"
#include "Sound3D.h"
#include "Sound2D.h"
#include "Music.h"
#include "Camera.h"

#include "GameGUI.h"
#include "Player.h"

#include "Music.h"

class Level;
class CameraControl;
class SceneManager;
class GuiManager;
class RenderSystem;
class EntityManager;
class EntityFactory;
class CollisionManager;
class Grid;
class GameState : public State
{
public:
	GameState(void);
	~GameState(void);

	void Init();
	void Shut();

	void Update(float deltatime);
	void Render();
	void Resume(){}

private:
	Heightmap::Vertex* m_terrain_vertices;
	void Pick(float x, float y);
	CollisionManager* m_collision_manager;

	float m_game_time;

	Grid* m_grid;

	std::vector<Gui::Button*> m_buttons;

	Texture* m_texture;
	Shader* m_shader;
	Renderable* m_renderable;

	Entity* m_selector;
	Entity* m_enemy_spawner;
	Entity* m_enemy_spawner2;
	Entity* m_wall;

	ParticleEmitter* m_particle_emitter;
	Sound3D* m_sound3D;
	Sound2D* m_sound2D;
	Music m_music;
	Vector3 m_raycast_hit;

	GameGUI* m_game_gui;

	Level* m_level;

	Music m_background_song_1;

	Player* m_player;
	Camera* m_camera;
	CameraControl* m_camera_control;
	EntityFactory* m_entity_factory;
	EntityManager* m_entity_manager;
	InputManager* m_input_manager;
	RenderSystem* m_render_system;
	GuiManager* m_gui_manager;
	SceneManager* m_scene_manager;
};

#endif //_GAME_STATE_H